home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 4.3 KB | 194 lines |
- 10 ' ***********************
- 20 ' ** BIORHYTHM **
- 30 ' ***********************
- 40 '
- 50 CLEAR
- 60 SCREEN 0,0,0,0
- 70 COLOR 7,0,0
- 80 CLS
- 90 KEY OFF
- 100 OPTION BASE 1
- 110 PI = 3.14159
- 120 DEF FNDOWN(AMT) = INT(13.5-9*SIN(2*PI*(JULIAN-JULIANB)/AMT))
- 130 DEF FNACROSS = 9+DAY+DAY
- 140 DEF FNSCR$ = CHR$(SCREEN(CSRLIN,POS(0)))
- 150 DIM MONTH.NAME$(12)
- 160 FOR I = 1 TO 12
- 170 READ MONTH.NAME$(I)
- 180 NEXT I
- 190 DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY
- 200 DATA AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER
- 210 '
- 220 CLS
- 230 LOCATE 7,7
- 240 LINE INPUT "Enter birth date ... (any reasonable format) ";CAL$
- 250 IF CAL$ = "" THEN 280
- 260 GOSUB 1510
- 270 IF YEAR THEN 320
- 280 LOCATE 9,1
- 290 PRINT "The date is unrecognizable, or isn't a valid date ... try again.
- 300 BEEP
- 310 GOTO 230
- 320 MONTHB = MONTH
- 330 DAYB = DAY
- 340 YEARB = YEAR
- 350 JULIANB = JULIAN
- 360 LOCATE 9,1
- 370 PRINT SPACE$(79);
- 380 LOCATE 9,7
- 390 LINE INPUT "Enter today's date ... ";CAL$
- 400 IF CAL$ = "" THEN 430
- 410 GOSUB 1510
- 420 IF YEAR THEN 470
- 430 LOCATE 11,1
- 440 PRINT "Your date is unrecognizable, or isn't a valid date ... try again.
- 450 BEEP
- 460 GOTO 380
- 470 DAY = 1
- 480 GOSUB 1210
- 490 JULIAN1 = JULIAN
- 500 MONTH = MONTH MOD 12 + 1
- 510 IF MONTH = 1 THEN YEAR = YEAR + 1
- 520 GOSUB 1210
- 530 JULIAN2 = JULIAN - 1
- 540 JULIAN = JULIAN1
- 550 GOSUB 1330
- 560 '
- 570 WIDTH 80
- 580 COLOR 7,0,1
- 590 CLS
- 600 LABEL$ = "BIORYTHMS - "+MONTH.NAME$(MONTH)+STR$(YEAR)
- 610 LABEL$ = LABEL$ + " - for a birth date of "
- 620 LABEL$ = LABEL$ + MONTH.NAME$(MONTHB) + STR$(DAYB)
- 630 LABEL$ = LABEL$ + "," + STR$(YEARB)
- 640 LOCATE 1,40 - LEN(LABEL$)/2
- 650 PRINT LABEL$;
- 660 LOCATE 25,1
- 670 COLOR 14,0
- 680 PRINT "Date -";
- 690 LOCATE 3,7
- 700 COLOR 10,0
- 710 PRINT "p = physical cycle";
- 720 LOCATE 3,30
- 730 COLOR 11,0
- 740 PRINT "s = sensitivity cycle";
- 750 LOCATE 3,56
- 760 COLOR 13,0
- 770 PRINT "c = cognitive cycle";
- 780 DAY = 0
- 790 COLOR 9,0
- 800 LOCATE 13,6
- 810 PRINT STRING$(70,"-");
- 820 FOR JULIAN = JULIAN1 TO JULIAN2
- 830 COLOR 14,0
- 840 DAY = DAY + 1
- 850 LOCATE 24,9 + DAY + DAY
- 860 IF DAY > 9 THEN PRINT CHR$(48+INT(DAY/10));
- 870 LOCATE 25,9 + DAY + DAY
- 880 PRINT CHR$(48+DAY MOD 10);
- 890 COLOR 10,0
- 900 LOCATE FNDOWN(23) , FNACROSS
- 910 IF FNSCR$ = " " THEN PRINT "p"; ELSE COLOR 12,0 : PRINT "*";
- 920 IF FNDOWN(23) <> 14 THEN 960
- 930 LOCATE 13,FNACROSS - 1
- 940 COLOR 12,0
- 950 PRINT "*";
- 960 COLOR 11,0
- 970 LOCATE FNDOWN(28) , FNACROSS
- 980 IF FNSCR$ = " " THEN PRINT "s"; ELSE COLOR 12,0 : PRINT "*";
- 990 COLOR 13,0
- 1000 LOCATE FNDOWN(33) , FNACROSS
- 1010 IF FNSCR$ = " " THEN PRINT "c"; ELSE COLOR 12,0 : PRINT "*";
- 1020 IF FNDOWN(33) <> 14 THEN 1060
- 1030 LOCATE 13,FNACROSS - 1
- 1040 COLOR 12,0
- 1050 PRINT "*";
- 1060 NEXT JULIAN
- 1070 LOCATE 9,1
- 1080 K$ = INKEY$
- 1090 IF K$ = "" THEN 1080
- 1100 END
- 1110 '
- 1120 ' Subroutine, capitalize cal$
- 1130 FOR CP = 1 TO LEN(CAL$)
- 1140 CHAR$ = MID$(CAL$,CP,1)
- 1150 IF CHAR$ < "a" OR CHAR$ > "z" THEN 1170
- 1160 MID$(CAL$,CP,1) = CHR$(ASC(CHAR$)-32)
- 1170 NEXT CP
- 1180 RETURN
- 1190 '
- 1200 ' Subroutine, MONTH,DAY,YEAR to JULIAN,WEEKDAY
- 1210 JULIAN = INT(365.242 * YEAR + 30.44 * (MONTH-1) + DAY + 1)
- 1220 T1 = MONTH - 2 - 12 * (MONTH < 3)
- 1230 T2 = YEAR + (MONTH < 3)
- 1240 T3 = INT(T2 / 100)
- 1250 T2 = T2 - 100 * T3
- 1260 WEEKDAY = INT(2.61 * T1 - 0.2) + DAY + T2 + INT(T2 / 4)
- 1270 WEEKDAY = (WEEKDAY + INT(T3 / 4) - T3 - T3 + 77) MOD 7 + 1
- 1280 T4 = JULIAN - 7 * INT(JULIAN / 7)
- 1290 JULIAN = JULIAN - T4 + WEEKDAY + 7 * (T4 < WEEKDAY - 1) + 1.72106E+06
- 1300 RETURN
- 1310 '
- 1320 ' Subroutine, JULIAN to MONTH,DAY,YEAR,WEEKDAY
- 1330 T5 = JULIAN
- 1340 YEAR = INT((JULIAN - 1.72106E+06) / 365.25 + 1)
- 1350 MONTH = 1
- 1360 DAY = 1
- 1370 GOSUB 1210
- 1380 IF JULIAN <= T5 THEN 1410
- 1390 YEAR = YEAR - 1
- 1400 GOTO 1370
- 1410 MONTH = INT((T5 - JULIAN) / 29 + 1)
- 1420 GOSUB 1210
- 1430 IF JULIAN <= T5 THEN 1460
- 1440 MONTH = MONTH - 1
- 1450 GOTO 1420
- 1460 DAY = T5 - JULIAN + 1
- 1470 GOSUB 1210
- 1480 RETURN
- 1490 '
- 1500 ' Subroutine, convert CAL$ to MONTH,DAY,YEAR
- 1510 GOSUB 1130
- 1520 MONTH = 0
- 1530 DAY = 0
- 1540 YEAR = 0
- 1550 FOR I = 1 TO 12
- 1560 IF INSTR(CAL$,LEFT$(MONTH.NAME$(I),3)) THEN MONTH = I
- 1570 NEXT I
- 1580 FOR I = 1 TO LEN(CAL$)
- 1590 CHAR$ = MID$(CAL$,I,1)
- 1600 IF CHAR$ < "0" OR CHAR$ > "9" THEN MID$(CAL$,I,1) = ":"
- 1610 NEXT I
- 1620 IF INSTR(CAL$,":") THEN 1680
- 1630 IF LEN(CAL$) <> 6 AND LEN(CAL$) <> 8 THEN 1930
- 1640 MONTH = VAL(LEFT$(CAL$,2))
- 1650 DAY = VAL(MID$(CAL$,3,2))
- 1660 YEAR = VAL(MID$(CAL$,5))
- 1670 GOTO 1820
- 1680 VFLAG = 0
- 1690 FOR I = 1 TO LEN(CAL$)
- 1700 CALVAL = VAL(MID$(CAL$,I))
- 1710 IF CALVAL = 0 THEN VFLAG = 0
- 1720 IF CALVAL = 0 OR VFLAG = 1 THEN 1810
- 1730 IF MONTH THEN 1760
- 1740 MONTH = CALVAL
- 1750 GOTO 1800
- 1760 IF DAY THEN 1790
- 1770 DAY = CALVAL
- 1780 GOTO 1800
- 1790 YEAR = CALVAL
- 1800 VFLAG = 1
- 1810 NEXT I
- 1820 IF YEAR < 100 AND YEAR > 0 THEN YEAR = YEAR + 1900
- 1830 IF YEAR < 1582 OR YEAR > 3999 THEN YEAR = 0
- 1840 IF YEAR = 0 THEN 1930
- 1850 MONTH2 = MONTH
- 1860 DAY2 = DAY
- 1870 YEAR2 = YEAR
- 1880 GOSUB 1210
- 1890 GOSUB 1330
- 1900 IF MONTH2 <> MONTH THEN YEAR = 0
- 1910 IF DAY2 <> DAY THEN YEAR = 0
- 1920 IF YEAR2 <> YEAR THEN YEAR = 0
- 1930 RETURN
-